package com.aloha.springframework.beans.factory.config;

import com.aloha.springframework.beans.BeansException;
import com.aloha.springframework.beans.PropertyValues;

public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor {

    /**
     * 实例化 Bean 之前执行, 相当于new这个Bean之前, 执行这个方法
     */
    default Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
        return null;
    }

    /**
     * 实例化 Bean 之后, 相当于new这个Bean之后, 但是尚未进行其他任何操作之前, 执行这个方法
     */
    default boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
        return true;  //是否让剩下的后置处理器对bean继续进行处理
    }

    /**
     * 在 Bean 对象实例化完成后，在属性注入阶段触发
     */
    default PropertyValues postProcessPropertyValues(PropertyValues pvs, Object bean, String beanName) throws BeansException {
        return pvs;
    }
}

